package morenoapp.model.data;

import java.awt.geom.Point2D;
import java.util.List;
import morenoapp.model.enums.MorenoSex;

/**
 *
 * @author dmitry.mamonov
 */
public interface MorenoRespondentFace extends MorenoIdFace, Comparable {
    /**
     * Получить полный список ответов пользователя.
     * @return
     */
    public List<MorenoAnswerFace> getAnswerList();

    /**
     * Получить ответ респондента на конкретный вопрос.
     * @param _question
     * @return
     */
    public MorenoAnswerFace getAnswerByQuestion(MorenoQuestionFace _question);

    /**
     * Позиция элемента в модели с 0.
     * @return
     */
    int getIndex();

    /**
     * Имя респондента.
     * @return
     */
    String getName();

    /**
     * Пол респондента.
     * @return
     */
    MorenoSex getSex();

    /**
     * Графическая позиция респондента.
     * @return
     */
    //Point2D getGraphPosition();

    void setName(String name);

    void setSex(MorenoSex sex);

//    void setGraphPosition(Point2D pos);

    String toHtmlString();

    /**
     *
     * @return Респондент пропустил опрос.
     */
    public boolean isPassedPoll();

    /**
     * Установить флаг указывающий что респондент пропустил опрос.
     */
    public void setPassedPoll(boolean passedPoll);

    /**
     * Количество выборов данного респондента другими респондентами.
     * @return
     */
    public double getMetricCountOfReceivedPreferences(MorenoMetricFilterFace _filter, MorenoMeasureFace _measure);

    /**
     * Количество выборов других респондентов сделанное данным респондентов.
     * @return
     */
    public double getMetricCountOfGivenPreferences(MorenoMetricFilterFace _filter, MorenoMeasureFace _measure);


    /**
     * Взвешенное количество выборов данного респондента другими респондентами.
     * @return
     */
    double getMetricCountOfPreferencesWeighted(MorenoMetricFilterFace _filter);

    /**
     * Количество <i>взаимных</i> выборов данного респондента другими респондентами.
     * @return
     */
    double getMetricCountOfMutualPreference(MorenoMetricFilterFace _filter);

    /**
     * Метрика - индивидуальный статус.
     * @return
     */
    double getMetricIndividualStatus();
}
